package com.lianqi.emcpframework.ddd.gencode.plugin;

import java.lang.annotation.Annotation;
import java.util.Set;

import javax.annotation.processing.Filer;
import javax.annotation.processing.RoundEnvironment;
import javax.lang.model.element.TypeElement;

import com.lianqi.emcpframework.ddd.gencode.define.TypeCollector;

/**
 * @program emcp-ddd-gencode
 * @ClassName ProcessorPlugin
 * @description: 插件接口类
 * @author: sky
 * @create: 2019-06-12 18:08
 */
public interface ProcessorPlugin {
    /**
     * @Fields: 使用的注解
     */
    <A extends Annotation> Class<A>[] applyAnnCls();

    /**
     * @Fields: 忽略的注解
     */
    <A extends Annotation> Class<A>[] ignoreAnnCls();

    /**
     * 初始化方法
     * 
     * @param typeCollector
     */
    void init(TypeCollector typeCollector);

    /**
     * 逻辑处理
     * 
     * @param annotations
     * @param roundEnv
     */
    void process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv);

    /**
     * 代码生成方法
     * 
     * @param filer
     */
    void write(Filer filer);
}
